<?php

class NomencladorController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete','crear','misNomencladores','cargarPrestacionesHijas','cargarCategoriaPrestacion'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	
        
        
         /**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Nomenclador::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

        
        
	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='nomenclador-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
        
         /*************************************************************/
        /*************************************************************/
        
        
        /**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
         /* */
	public function actionDelete($id)
	{   
            $transaction = Yii::app()->db->beginTransaction();
            try{
                $this->loadModel($id)->delete();

                $logs = new LogsTransacciones;
                $logs->tabla = Yii::app()->getController()->getId();
                $logs->fecha = date('Y-m-d');
                $logs->usuario =  Yii::app()->user->name;
                $logs->operacion = 'BAJA';
                $logs->comentarios = 'BAJA - ' . $id;
                $logs->save();
                $transaction->commit();
                if(!isset($_GET['ajax']))
                    Yii::app()->user->setFlash('success','EXITO!!!. La eliminacion fue Exitosa.');
                else
                    echo "<div class='flash-success'> EXITO!!!. La eliminacion fue Exitosa.</div>";
            }catch(CDbException $e)
            {
                $transaction->rollBack();
                if(!isset($_GET['ajax']))
                    Yii::app()->user->setFlash('error','ERROR!!! No se puedo eliminar!!!');
                else
                    echo "<div class='flash-error'> ERROR!!! No se puedo eliminar!!!</div>"; //for ajax
            }

                // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
                if(!isset($_GET['ajax']))
                    $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('MisNomencladores'));
	}
        
        
         /**  
	 *   Administracion y Manejo de los Nomencladores creados en el sistema.
         * 
         *   Renderiza la vista admin; que despliega un listado de todo los nom,enmcladoeres cargados en el sistema.
	 */
      
	public function actionMisNomencladores()
	{
               $this->layout = '//layouts/column1';
               
	        $model= new Nomenclador('search');                
		$model->unsetAttributes();  // clear any default values
                
		if(isset($_GET['Nomenclador']))
			$model->attributes=$_GET['Nomenclador'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}
        
          /*
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCrear()
	{
            
          $transaction = Yii::app()->db->beginTransaction();            
          try
          {
              $model=new Nomenclador;
              if ((isset($_GET['id'])) && (!empty($_GET['id'])))
                   $model = $this->loadModel($_GET['id']);
                
		if(isset($_POST['Nomenclador']))
		{
			$model->attributes=$_POST['Nomenclador'];
                        $esNuevo = $model->isNewRecord;
                        
			if($model->save()){      
                          
                            $logs = new LogsTransacciones;
                            $logs->tabla = Yii::app()->getController()->getId();
                            $logs->fecha = date('Y-m-d');
                            $logs->usuario = Yii::app()->user->name;
                            if ($esNuevo){
                                $logs->operacion = 'ALTA';
                                $logs->comentarios = 'ALTA - ' . $model->id;}
                            else{
                                $logs->operacion = 'MODIFICACION';
                                $logs->comentarios = 'MODIFICACION - ' . $model->id;}                 

                             $logs->save(); 
                        
                             $transaction->commit();
                             Yii::app()->user->setFlash('success','Correcto. Se Cargo el Nomenclador Correctamente!!!');
                             $this->redirect(array('MisNomencladores'));
                        }				
		}     
                   $transaction->commit();
		   $this->render('create',array(
			'model'=>$model,
		   ));
                   
             }            
             catch(Exception $e)
             {  Yii::app()->user->setFlash('resultado_carga','Se ha producido un Error en la Carga POR FAVOR intente Nuevamente!!! <br /> ' . $e);
                $transaction->rollBack();
                $this->redirect(array('nomenclador/misNomencladores')); 
             }      
	} // FIn actionCrear
        
          /*  
         * Despleja los Datos de cada Nomenclador.
         * 
         * Accion que se encarga de buscar los datos de un determinado nomenclador, y 
         * ademas busca y retorna en un provedor de datos(dataprovider), las prestaciones asociadas,
         * y cargadas a ese nomenclador
         */
        public function actionView($id)
	{    
             $this->layout = '//layouts/column1';
          
             
             
             $modelNomenclador = $this->loadModel($id);            
             
             $criteria=new CDbCriteria;
             $criteria->compare('id_nomenclador',$id); 
             $sort=new CSort();
             $sort->defaultOrder='codigo';
             
             $misCategoriaPrestaciones = new CActiveDataProvider('CategoriaPrestaciones',array('criteria'=>$criteria, 'sort'=>$sort));
             
		$this->render('view',array(
			'model'=>$modelNomenclador,
                        'misPrestaciones'=>$misCategoriaPrestaciones,
		));
	}
        
         /*
         * Accion que se encarga de insertar un registro del Modelo de CategoriaPrestaicones.
         * 
         * La accion es lalamda mediante ajax, por peticion en el view de un nomenclador,
         * esta recibe una peticion para insertar un registro en la tabla de categoriaPrestaciones
         */
       public function actionCargarCategoriaPrestacion(){            
       
         $transaction = Yii::app()->db->beginTransaction();
         try{             
       
            $modelPrestacion = new CategoriaPrestaciones(); 

            if (!empty($_POST["idnom"])){  
                $modelPrestacion->id_nomenclador = $_POST["idnom"]; }          
              
            $idcat = (int) $_POST["idcat"];
            $cat =     (int) $_POST["cat"];
            if ((!empty($idcat)) && ($idcat != -1)){
                $modelPrestacion = CategoriaPrestaciones::model()->findByPk($idcat); 
            }
            if ((!empty($cat)) && ($cat != -1)){
                $modelPrestacion = CategoriaPrestaciones::model()->findByPk($cat); 
            }
              
            if ((isset($_POST['CategoriaPrestaciones'])) && (!empty($_POST['CategoriaPrestaciones'])))
            {   $esNuevo = $modelPrestacion->isNewRecord;          
                $modelPrestacion->attributes=$_POST['CategoriaPrestaciones'];

                if($modelPrestacion->save())
                {  
                                $logs = new LogsTransacciones;
                                $logs->tabla = 'CategoriaPrestaciones';
                                $logs->fecha = date('Y-m-d');
                                $logs->usuario = Yii::app()->user->name;
                                if ($esNuevo){
                                    $logs->operacion = 'ALTA';
                                    $logs->comentarios = 'ALTA - ' . $modelPrestacion->id;}
                                else{
                                    $logs->operacion = 'MODIFICACION';
                                    $logs->comentarios = 'MODIFICACION - ' . $modelPrestacion->id;}                 

                                $logs->save(); 
                                $transaction->commit();
                    if (Yii::app()->request->isAjaxRequest)
                    {
                        echo CJSON::encode(array(
                            'status'=>'COMPLETO', 
                            'div'=>"Se Guardo el Registro en el Sistema",
                            ));
                        exit;               
                    }
                    else
                    $this->redirect(array('view','id'=>$model->id));
                }            
            }//del if isset POST
            
            if (Yii::app()->request->isAjaxRequest)
            {   $transaction->commit();
                echo CJSON::encode(array(
                    'status'=>'formulario', 
                    'div'=>$this->renderPartial('_formCargarCategoriaPrestacion', array('model'=>$modelPrestacion), true)));               
                    exit;               
            }
            
           }      // fin del try       
             catch(Exception $e)
             {  Yii::app()->user->setFlash('resultado_carga','Se ha producido un Error en la Carga POR FAVOR intente Nuevamente!!! <br /> ' . $e);
                $transaction->rollBack();
                $this->redirect(array('nomenclador/misNomencladores')); 
             }      
            
          
          
    } // FIN actionCargarPrestacionPadre
    
    
    /*
     * Funcion que es llamada por peticion  AJAX para desplejar las prestaicones hijas en el Gird, tabla de prestaciones padres del}
     * nomenclador.
     * 
     * Despliega las prestaciones OBJETO DE LA PRESTACION, de los tipos de PRESTACION
     */
    
    public function actionCargarPrestacionesHijas(){
            if( Yii::app()->request->isAjaxRequest )
  {
    // Stop jQuery from re-initialization
    Yii::app()->clientScript->scriptMap['jquery.js'] = false;}
          $cat_pres  = $_POST['idcatprestacion'];
          $modelCategoriaPrestacion = CategoriaPrestaciones::model()->findByPk($cat_pres);
      
          $modelPrestacion = new Prestaciones;
          $modelPrestacion-> id_categoriaprestacion = $cat_pres;
                if ((isset($_POST['page'])) && (!empty($_POST['page'])))
                  $nroPage =     $_POST['page'] - 1;
                else
                  $nroPage = 0;
                 
          $criteria=new CDbCriteria;
          $criteria->compare('id_categoriaprestacion',$cat_pres);
          $sort=new CSort();
          $sort->defaultOrder='codigo';
           
          if (isset($_GET['sort']))
              $sort->attributes = array($_GET['sort']);  
          
          $dataProvider = new CActiveDataProvider(Prestaciones, array(
			'criteria'=>$criteria,
              'sort'=>$sort,
                        'pagination'=>array(
                            'pageSize'=>10,
                            'currentPage' =>$nroPage     
                         ),
		));          

             
            echo CJSON::encode(array(
                'status'=>'formulario', 
                'div'=>$this->renderPartial('_formCargarPrestaciones', array('modelPrestacion'=>$dataProvider,'modelCategoriaPrestacion'=>$modelCategoriaPrestacion,'categoria'=>$cat_pres), true, true)));               
             exit;  
                                       
        
            
     }
     
    
    
        
}
